package com.xhj.ipersistent.mapping;

import java.util.List;

/**
 * BoundSql
 *
 * @author XJks
 * @description 在处理任何动态内容后，实际的 SQL 字符串从 {@link MappedStatement} 获取。SQL 可能具有 SQL 占位符“？”和参数映射列表（有序）。
 */
public class BoundSql {
    /**
     * TODO:
     *  经过处理后的 SQL 语句，可能包含“？”占位符，例如：SELECT * FROM user WHERE id = ?
     *  该sql主要用于原生JDBC使用，通过{@link java.sql.Connection#prepareStatement(String sql)}方法创建PreparedStatement对象
     */
    private final String sql;

    /**
     * TODO:
     *  SQL 语句中的参数映射列表，主要用于对 SQL 语句中的“？”占位符进行赋值，通过{@link ParameterMapping#parameterName}通过反射获取参数值。
     *  目前{@link com.xhj.ipersistent.executor.Executor}中的所有参数类型都支持一个参数，且参数类型是{@link Object}类型，然后根据{@link ParameterMapping#parameterName}参数名称通过反射获取参数值。
     */
    private final List<ParameterMapping> parameterMappings;

    public BoundSql(String sql, List<ParameterMapping> parameterMappings) {
        this.sql = sql;
        this.parameterMappings = parameterMappings;
    }

    public String getSql() {
        return sql;
    }

    public List<ParameterMapping> getParameterMappings() {
        return parameterMappings;
    }
}
